我在MongoDB年终大会上获二等奖文章:由数据迁移至MongoDB导致的数据不一致问题及解决方案
The following article comes from Python专栏 Author 上海小胖
故事背景
企业现状
2019年年初,我接到了一个神秘电话,电话那头竟然准确的说出了我的昵称:上海小胖。
我想这事情不简单,就回了句:您好,我是小胖,请问您是?
“我就是刚刚加了你微信的 xxx 啊”
哦……他只是把我的微信昵称报出来了……
随着深入沟通,了解到对方是某央企保密单位的大数据部门技术负责人,因为目前整个集团在进行数字化转型。在决策过程中,遇到了几个阻力。
首先,大部分部门和科室的数据基础还很薄弱,存在数据标准混乱、 数据质量层次不齐、各条块之间数据孤岛化严重等现象,阻碍了数据的共享应用。
其次,受限于数据规模和数据源种类的丰富程度,多数企业的数据应用刚刚起步,主要集中在精准营销,舆情感知和风险控制等有限场景,应用深度不够,应用空间亟待开拓。
再次,由于数据的价值很难评估,企业难以对数据的成本以及其对业务的贡献进行评估,从而难以像运营有形资产一样管理数据资产。
而这位技术负责人本着认真、负责、专研的精神,死磕大数据领域,试图在市面上找到一款能够满足他需求的产品,帮助他解决数据痛点。
经过沟通,了解到目前的企业数据现状是:
数据散落在各部门科室,8大部门共50+科室 数据量非常大,高峰期每小时可产生100GB数据,每天存量数据 1TB 数据类型丰富,包括: 关系型数据库:Oracle,MySQL,PostgreSQL,GBase,GauseDB等 非关系型数据库:MongoDB 结构化文件:XML,Excel,CSV,TXT 非结构化文件:音频,视频,pdf 每个月都会有 5 个新项目,而每次对接新项目都需要花费 1-3个月时间在数据对接上 项目周期长,而大多数时间都在数据冗余、清洗、过滤上 多副本数据带来的数据维护成本也在不断增加,影响了研发进度
考虑迁移
通过数据同步完成数据汇聚、采集工作 通过数据发布对外提供数据服务 通过数据治理对数据资产进行有效管理
解决方案
架构
技术实现
本次目标是一次性数据导入,还是需要之后保持增量同步 数据迁移中有没有复杂的ETL场景 对同步延时要求 同步的数据量预估,高峰预估
孤儿文档
现象
排查
确认数据库类型
源端数据库 mongo 3.2 单实例副本集 64c 256GB SAS硬盘 万兆光纤内网 目标端数据库 mongo 4.0 6分片集群 64c 256GB SAS硬盘 万兆光纤内网
找出重复数据
检查数据同步工具日志
检查 mongodb 日志
用户开启同步任务,数据开始按预期向目标端数据库按规则同步。 同步10分钟后,机房断网,此时数据同步任务处于重试阶段,mongodb 集群全部断开网络。 断开网络期间,mongodb 在进行的块迁移被迫终止。 一段时间后,网络恢复,数据同步自动重试机制保证用户无需人工干预,继续开始同步任务。 mongodb 继续开始块迁移。
解决
var nextKey = { };
vard result;
while ( nextKey != null ) {
result = db.adminCommand( { cleanupOrphaned: "<COLLECTION>", startingFromKey: nextKey } );
if (result.ok != 1)
print("Unable to complete at this time: failure or timeout.")
printjson(result);
nextKey = result.stoppedAtKey;
}
总结
在使用数据同步工具迁移数据到 mongodb 分片集群的时候,需要作如下动作 停止平衡器:如何停止平衡器 使用cleanOrphan命令:如何清理孤儿文档 面对数据不一致性,排查思路可以从数据库、同步逻辑出发 专业的事交给专业的人做。
(*本文为AI科技大本营转载文章,转载请联系原作者)
◆
精彩推荐
◆
1、评选进行中,参与投票即有机会参与抽奖,60+公开课免费学习
如果群满100人,无法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)
“抗击”新型肺炎!阿里达摩院研发AI算法,半小时完成疑似病例基因分析
Python PK C++,究竟谁更胜一筹?
疫情防控,开发者集结出战!
图模型+Bert香不香?完全基于注意力机制的图表征学习模型Graph-Bert
疫情之下「在家办公模式」开启,你该选择哪些远程协同工具?
苹果2020iPhone 展望:相机大升级,5G首次接入
世界上最大的色情网站Pornhub,现接受用Tether对模特进行付款
你点的每个“在看”,我都认真当成了AI